package main

// work队列，可以创建多个消费者进行消费。每个消费者只能消费一次消息

import (
	"fmt"
	"log"
	"time"

	"github.com/streadway/amqp"
)

func main() {
	// 拨号
	conn, err := amqp.Dial("amqp://guest:123456@localhost:5672/")
	if err != nil {
		panic(err)
	}
	defer conn.Close()
	// 创建信道
	ch, err := conn.Channel()
	if err != nil {
		panic(err)
	}
	// 队列声明
	q, err := ch.QueueDeclare(
		"hello", // 队列名字
		true,    // 消息是否持久化
		false,   // 不使用的时候删除队列
		false,   // exclusive
		false,   // no-wait
		nil,     // arguments
	)
	if err != nil {
		panic(err)
	}
	// 消息内容
	for i := 0; i < 100; i++ {
		body := fmt.Sprintf("Hello World! %v", i)
		// 推送消息
		if err := ch.Publish(
			"",     // exchange（交换机名字），这里忽略
			q.Name, // 路由参数，这里使用队列名字作为路由参数
			false,  // mandatory 强制
			false,  // immediate 实时
			amqp.Publishing{
				DeliveryMode: 2, // 消息持久化
				ContentType:  "text/plain",
				Body:         []byte(body), // 消息内容
			}); err != nil {
			panic(err)
		}
		log.Printf("生产消息成功 %s", body)
		time.Sleep(2 * time.Second)
	}

}
